package com.example.accessibilitydemo.autoclick3

import android.accessibilityservice.AccessibilityService
import android.os.Build
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.accessibility.AccessibilityEvent
import android.view.accessibility.AccessibilityNodeInfo
import android.view.accessibility.AccessibilityWindowInfo
import androidx.annotation.RequiresApi
import kotlin.concurrent.thread

class MyAccessibilityService : AccessibilityService() {

    /*****
     *
     *
     *      这个看上去是可行的
     *    https://blog.csdn.net/Ikulm/article/details/126390965
     *
     *
     *    目前存在的问题，有时候就算找到了节点，然后居然不惦记
     *    大部分情况是头一次热启动 跟布局找不到
     *
     *
     *
     * */

    @RequiresApi(Build.VERSION_CODES.N)
    override fun onAccessibilityEvent(event: AccessibilityEvent) {
        //获取指定包名应用
        val packageName = event.packageName
        //只使用界面变化的监听，避免点击事件监听进入死循环
        if (AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED != event.eventType) {
            return
        }

        val handler = Handler(Looper.getMainLooper())

        if ("com.example.myapplication2" == packageName) {
            Log.e("Thread:${Thread.currentThread().name}", "event:${event}")
            //找到对应node，开始点击

            //  这本质就是hook view 的一套方法，如果当view没有加载完成，其实上是找不到的！！
            //  第三个参数的名字是要view 控件上面设置的text的值才行。

//            val nodeInfo = AsUtils.findNodeInfo(
//                this,
//                "com.example.myapplication2:id/bt1",
//                "BT1",
//                ""
//            )
//            nodeInfo?.let {
//                thread {
//                    Log.e("onAccessibilityEvent","找到节点，三秒后执行点击事件")
//                    Thread.sleep(3000)
//                    AsUtils.performClickNodeInfo(it)
//                }
//            }

            AsUtils.click(this, 165f, 371f)


//            AsUtils.findNodeInfo2(this,
//                "com.example.myapplication2:id/bt1",
//                "BT1",
//                "", callback = {
//                    if (it != null) {
//                        it?.let {
//                            thread {
//                                Log.e("onAccessibilityEvent", "找到节点，三秒后执行点击事件")
//                                val handler = Handler(Looper.getMainLooper())
//                                handler.postDelayed({
//                                   val  boolean = AsUtils.performClickNodeInfo(it)
//
//                                }, 2000)
//                            }
//                        }
//                    }
//                })



        }
    }

    override fun onInterrupt() {
        Log.e("onInterrupt==>", "onInterrupt")
    }

    /**
     * 服务连接成功
     */
    @RequiresApi(Build.VERSION_CODES.N)
    override fun onServiceConnected() {
        super.onServiceConnected()
        thread {
            //便于设置完成后返回来看到显示效果
            Thread.sleep(5000)
            Log.e("click", "坐标点击：500,515")
            AsUtils.click(this, 507f, 512f)
        }
    }
}